﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using ShoppingCart.WebSite.Code;
using SC = ShoppingCart.Business.Entity;

namespace ShoppingCart.WebSite.WebControls
{
    public partial class Products : UserControl
    {
        public event EventHandler UpdateProductos;

        protected void InvokeUpdateProductos(EventArgs e)
        {
            if (UpdateProductos != null) UpdateProductos(this, e);
        }

        protected List<SC.Producto> Carrito
        {
            get { return Session["Carrito"] == null ? new List<SC.Producto>() : (List<SC.Producto>)Session["Carrito"]; }
            set
            {
                Session["Carrito"] = value;
                LoadCarrito();
                InvokeUpdateProductos(EventArgs.Empty);
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack) return;
            LoadCarrito();
        }

        protected void RepProductosItemCommand(object source, RepeaterCommandEventArgs e)
        {
            switch (e.CommandName)
            {
                case "Actualizar":
                    {
                        var idProducto = Convert.ToInt32(e.CommandArgument);
                        var producto = Carrito.Single(p => p.IdProducto == idProducto);
                        var txtCantidad = (TextBox)((ImageButton)e.CommandSource).Parent.FindControl("txtCantidad");
                        producto.Cantidad = Convert.ToInt32(txtCantidad.Text);
                        UpdateProducto(producto);
                        break;
                    }
                case "Eliminar":
                    {
                        var idProducto = Convert.ToInt32(e.CommandArgument);
                        RemoveProducto(idProducto);
                        break;
                    }
            }
        }

        public void LoadCarrito()
        {
            BindControl<SC.Producto>.BindRepeater(repProductos, Carrito);
        }

        private void UpdateProducto(SC.Producto producto)
        {
            var carrito = Carrito;
            var productito = carrito.Where(p => p.IdProducto == producto.IdProducto).FirstOrDefault();
            if (productito != null) productito.Cantidad = producto.Cantidad;
            else carrito.Add(producto);
            Carrito = carrito;
        }

        private void RemoveProducto(int idProducto)
        {
            var carrito = Carrito;
            carrito.RemoveAll(p => p.IdProducto == idProducto);
            Carrito = carrito;
        }
    }
}